package com.quanz.ckgl.services;

import org.crank.crud.criteria.Criterion;
import org.crank.crud.criteria.OrderBy;

/**
 * 用户信息维护服务
 * 
 * @author James Quan
 * @version 2015年10月3日 下午11:09:28
 */
public interface UserService {

	/**
	 * 通过用户id读取用户信息
	 * 
	 * @param id
	 *            用户的id
	 * @return
	 */
	public User findUserById(long id);

	/**
	 * 通过用户帐号读取用户信息
	 * 
	 * @param account
	 *            用户的账号
	 * @return
	 */
	public User findUserByAccount(String account);

	/**
	 * 返回满足约束条件的用户对象集合
	 * 
	 * @param orderBy
	 *            返回结果时的排序设置
	 * @param startPosition
	 *            返回结果前 跳过的记录条数，如果设置为-1则不控制
	 * @param maxResults
	 *            返回结果的最大记录条数，如果设置为-1则不控制
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public User[] findUser(OrderBy[] orderBy, int startPosition,
			int maxResults, Criterion... criteria);

	/**
	 * 返回满足约束条件的用户对象个数
	 * 
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public int findUserCount(Criterion... criteria);


	/**
	 * 返回用户拥有的角色集合
	 * 
	 * @param user
	 *            待查找的用户
	 * @return
	 */
	public Role[] findUserRoles(User user);

	/**
	 * 通过角色id读取角色信息
	 * 
	 * @param id
	 *            角色id
	 * @return
	 */
	public Role findRoleById(long id);

	/**
	 * 通过角色代码读取角色信息
	 * 
	 * @param code
	 *            角色代码
	 * @return
	 */
	public Role findRoleByCode(String code);

	/**
	 * 返回满足约束条件的角色对象集合
	 * 
	 * @param orderBy
	 *            返回结果时的排序设置
	 * @param startPosition
	 *            返回结果前 跳过的记录条数，如果设置为-1则不控制
	 * @param maxResults
	 *            返回结果的最大记录条数，如果设置为-1则不控制
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public Role[] findRole(OrderBy[] orderBy, int startPosition,
			int maxResults, Criterion... criteria);

	/**
	 * 返回满足约束条件的角色对象个数
	 * 
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public int findRoleCount(Criterion... criteria);

	/**
	 * 返回角色的成员用户集合
	 * 
	 * @param role
	 *            待查找的角色
	 * @return
	 */
	public User[] findRoleMembers(Role role);

	/**
	 * 建立新用户
	 * 
	 * @param user
	 *            待新建的用户
	 * @return
	 */
	public User createUser(User user);

	/**
	 * 删除用户
	 * 
	 * @param user
	 *            待删除的用户
	 */
	public void removeUser(User user);

	/**
	 * 保存对用户信息的修改
	 * 
	 * @param user
	 *            带保存的用户
	 */
	public void updateUser(User user);

	/**
	 * 建立新角色
	 * 
	 * @param role
	 *            待新建的角色
	 * @return
	 */
	public Role createRole(Role role);

	/**
	 * 删除角色
	 * 
	 * @param role
	 *            待删除的角色
	 */
	public void removeRole(Role role);

	/**
	 * 保存对角色信息的修改
	 * 
	 * @param role
	 *            待保存的角色
	 */
	public void updateRole(Role role);

	/**
	 * 设置用户拥有的角色
	 * 
	 * @param user
	 *            待设置的用户
	 * @param roles
	 *            用户所拥有的角色集合
	 */
	public void changeAuthority(User user, Role[] roles);
}
